package model

// DeliveryStation 表示一个配送站
type DeliveryStation struct {
	ID          string    `gorm:"primaryKey" json:"id"`
	Name        string    `json:"name"`
	Location    Location  `gorm:"embedded" json:"location"`
	Capacity    int       `json:"capacity"`
	Vehicles    []Vehicle `gorm:"foreignKey:DeliveryStationID" json:"vehicles"`
	ServiceArea float64   `json:"service_area"`
}

// Vehicle 表示配送车辆
type Vehicle struct {
	ID                string        `gorm:"primaryKey" json:"id"`
	Type              VehicleType   `json:"type"`
	Capacity          float64       `json:"capacity"`
	MaxVolume         float64       `json:"max_volume"`
	CurrentLoad       float64       `json:"current_load"`
	CurrentVolume     float64       `json:"current_volume"`
	Status            VehicleStatus `json:"status"`
	DeliveryStationID string        `gorm:"size:255" json:"delivery_station_id"`
}

// VehicleType 车辆类型枚举
type VehicleType int

const (
	VehicleTypeLarge VehicleType = iota // 大型车辆（仓库到配送站）
	VehicleTypeSmall                    // 小型车辆（配送站到客户）
)

// VehicleStatus 车辆状态枚举
type VehicleStatus int

const (
	VehicleStatusAvailable VehicleStatus = iota
	VehicleStatusInUse
	VehicleStatusMaintenance
)

// Route 表示配送路线
type Route struct {
	ID                string      `gorm:"primaryKey" json:"id"`
	VehicleID         string      `json:"vehicle_id"`
	DeliveryStationID string      `json:"delivery_station_id"`
	Stops             []Stop      `gorm:"foreignKey:RouteID" json:"stops"`
	TotalDistance     float64     `json:"total_distance"`
	TotalTime         float64     `json:"total_time"`
	Status            RouteStatus `json:"status"`
}

// Stop 表示路线上的一个配送点
type Stop struct {
	RouteID     string   `gorm:"primaryKey" json:"route_id"`
	OrderID     string   `json:"order_id"`
	Location    Location `gorm:"embedded" json:"location"`
	ServiceTime float64  `json:"service_time"`
	ArrivalTime float64  `json:"arrival_time"`
}

// RouteStatus 路线状态枚举
type RouteStatus int

const (
	RouteStatusPlanned RouteStatus = iota
	RouteStatusInProgress
	RouteStatusCompleted
)

// TableName 指定表名
func (DeliveryStation) TableName() string {
	return "delivery_stations"
}

// TableName 指定表名
func (Vehicle) TableName() string {
	return "vehicles"
}

// TableName 指定表名
func (Route) TableName() string {
	return "routes"
}

// TableName 指定表名
func (Stop) TableName() string {
	return "stops"
}
